home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / T U R B O Language / Turbo C v3.0 / TC3SETUP.EXE / INCLUDE / FSTREAM.H < prev    next >
C/C++ Source or Header  |  1992-02-18  |  5KB  |  169 lines

  1. /*  fstream.h -- class filebuf and fstream declarations
  2.  
  3.     Copyright (c) 1990, 1991 by Borland International    
  4.     All rights reserved
  5. */
  6.  
  7. #ifndef __cplusplus
  8. #error Must use C++ for the type fstream.
  9. #endif
  10.  
  11. #ifndef __FSTREAM_H
  12. #define __FSTREAM_H
  13.  
  14. #if !defined( __DEFS_H )
  15. #include <_defs.h>
  16. #endif
  17.  
  18. #if !defined( __IOSTREAM_H )
  19. #include <iostream.h>
  20. #endif
  21.  
  22. #pragma option -Vo-
  23.  
  24. _CLASSDEF(filebuf)
  25. _CLASSDEF(fstreambase)
  26. _CLASSDEF(ifstream)
  27. _CLASSDEF(ofstream)
  28. _CLASSDEF(fstream)
  29.  
  30. class  _CLASSTYPE filebuf : public streambuf {
  31. public:
  32. static const int openprot;  // default file protection
  33.  
  34.     // constructors, destructor
  35.     _Cdecl filebuf();   // make a closed filebuf
  36.     _Cdecl filebuf(int);    // make a filebuf attached to fd
  37.     _Cdecl filebuf(int _f, char *, int); // same, with specified buffer
  38.     _Cdecl ~filebuf();
  39.  
  40.     int _Cdecl is_open();   // is the file open
  41.     int _Cdecl fd();        // what is the file descriptor
  42.  
  43.     // open named file with mode and protection, attach to this filebuf
  44.     filebuf * _Cdecl open( const char *, int,
  45.                                 int = filebuf::openprot );
  46.  
  47.     filebuf * _Cdecl close();      // flush and close file
  48.     filebuf * _Cdecl attach(int);  // attach this filebuf to opened
  49.                                         // file descriptor
  50.  
  51. /*
  52.  * These perform the streambuf functions on a filebuf
  53.  * Get and Put pointers are kept together
  54.  */
  55. virtual int _Cdecl overflow(int = EOF);
  56. virtual int _Cdecl underflow();
  57. virtual int _Cdecl sync();
  58. virtual streampos  _Cdecl seekoff(streamoff, ios::seek_dir, int);
  59. virtual streambuf * _Cdecl setbuf(char *, int);
  60.  
  61. protected:
  62.     int xfd;        // the file descriptor, EOF if closed
  63.     int mode;       // the opened mode
  64.     short   opened; // non-zero if file is open
  65.  
  66.     streampos last_seek;    // unused           ***
  67.     char *   in_start; // unused           ***
  68.  
  69.     int _Cdecl last_op();   // unused           ***
  70.     char    lahead[2];      // current input char if unbuffered ***
  71. };
  72. /*
  73.  * The data members marked with *** above are not documented in the AT&T
  74.  * release of streams, so we cannot guarantee compatibility with any
  75.  * other streams release in the use or values of these data members.
  76.  * If you can document any expected behavior of these data members, we
  77.  * will try to adjust our implementation accordingly.
  78.  */
  79. inline int  _Cdecl filebuf::is_open()   { return opened; }
  80. inline int  _Cdecl filebuf::fd()        { return xfd; }
  81.  
  82.  
  83. class _CLASSTYPE fstreambase : virtual public ios {
  84. public:
  85.     _Cdecl fstreambase();
  86.     _Cdecl fstreambase(const char *, int, int = filebuf::openprot);
  87.     _Cdecl fstreambase(int);
  88.     _Cdecl fstreambase(int _f, char *, int);
  89.     _Cdecl ~fstreambase();
  90.  
  91.     void    _Cdecl open(const char *, int, int = filebuf::openprot);
  92.     void    _Cdecl attach(int);
  93.     void    _Cdecl close();
  94.     void    _Cdecl setbuf(char *, int);
  95.     filebuf * _Cdecl rdbuf();
  96.  
  97. protected:
  98.     void    _Cdecl verify(int); // unimplemented    ***
  99.  
  100. private:
  101.     filebuf buf;
  102. };
  103. /*
  104.  * The function member marked with *** above is not documented in the AT&T
  105.  * release of streams, so we cannot guarantee compatibility with any
  106.  * other streams release in its use.
  107.  * If you can document any expected behavior of this function member, we
  108.  * will try to adjust our implementation accordingly.
  109.  */
  110. inline filebuf * _Cdecl fstreambase::rdbuf() { return &buf; }
  111.  
  112.  
  113. class _CLASSTYPE ifstream : public fstreambase, public istream {
  114. public:
  115.     _Cdecl ifstream();
  116.     _Cdecl ifstream(const char *,int = ios::in,int = filebuf::openprot);
  117.     _Cdecl ifstream(int);
  118.     _Cdecl ifstream(int _f, char *, int);
  119.     _Cdecl ~ifstream();
  120.  
  121.     filebuf * _Cdecl rdbuf();
  122.     void    _Cdecl open(const char *, int = ios::in,
  123.                         int = filebuf::openprot);
  124. };
  125. inline filebuf * _Cdecl ifstream::rdbuf() { return fstreambase::rdbuf(); }
  126. inline void _Cdecl ifstream::open(const char * name, int m, int prot) {
  127.                 fstreambase::open(name, m | ios::in, prot);
  128.                 }
  129.  
  130.  
  131. class _CLASSTYPE ofstream : public fstreambase, public ostream {
  132. public:
  133.     _Cdecl ofstream();
  134.     _Cdecl ofstream(const char *, int = ios::out,
  135.                     int = filebuf::openprot);
  136.     _Cdecl ofstream(int);
  137.     _Cdecl ofstream(int _f, char *, int);
  138.     _Cdecl ~ofstream();
  139.  
  140.     filebuf * _Cdecl rdbuf();
  141.     void    _Cdecl open(const char *, int = ios::out,
  142.                         int = filebuf::openprot);
  143. };
  144. inline filebuf * _Cdecl ofstream::rdbuf() { return fstreambase::rdbuf(); }
  145. inline void _Cdecl ofstream::open(const char * name, int m, int prot) {
  146.                 fstreambase::open(name, m | ios::out, prot);
  147.                 }
  148.  
  149.  
  150. class _CLASSTYPE fstream : public fstreambase, public iostream {
  151. public:
  152.     _Cdecl fstream();
  153.     _Cdecl fstream(const char *, int, int = filebuf::openprot);
  154.     _Cdecl fstream(int);
  155.     _Cdecl fstream(int _f, char *, int);
  156.     _Cdecl ~fstream();
  157.  
  158.     filebuf * _Cdecl rdbuf();
  159.     void    _Cdecl open(const char *, int, int = filebuf::openprot);
  160. };
  161. inline filebuf * _Cdecl fstream::rdbuf() {return fstreambase::rdbuf();}
  162. inline void _Cdecl fstream::open(const char * name, int m, int prot) {
  163.                 fstreambase::open(name, m, prot);
  164.                 }
  165.  
  166. #pragma option -Vo.
  167.  
  168. #endif
  169.